package com.mzx.javase.myExtends;

/**
 * @Description:
 * @Date: 2021/11/13 20:46
 * @Author: MarKing
 */
public class MyTests {
    public static void main(String[] args) {
        Cat cat = new Cat();
        cat.age = 10;
        cat.color = "black";
        cat.name = "猫";
        cat.printAnimal();
        cat.eat();



    }
    //结论：
    //1.子类可以继承父类非私有的属性和方法
    //2.子类可以在父类的基础上扩展属性和方法
    //3.子类可以重写父类的属性和方法，当子类重写父类的属性和方法实例化时，jvm堆中放的是子类特有的属性值

    //4.子类创建对象时，会默认调用父类无参构造函数
    //5.子类的构造函数可以使用super关键字显示调用父类的构造函数

    //重写和重载的区别
    //重写：发生在父类与子类中，重载：发生在一个类中
    //重写要求子类的方法与父类的方法名一致，参数列表一致，返回类型一致（可以是父类子类型）；重载发生在同类中，方法名相同，参数列表不同，
    //                                                                      返回值可以不同
    //访问权限：重写要求子类不能比父类有更严格的访问权限；重载对访问权限没有要求
    //异常：重写要求子类不能比父类抛出更多的异常，重载没有要求


    /**
     * 访问修饰符
     * private私有的 只能在本类中访问
     * default默认   在本类中，同包中访问
     * protected受保护的  在本类中，同包中，不同包中（子类）访问
     * public共有的  本类中，同包中，不同包中都可以访问
     */
    //this和super的区别
    //this代表本类，指针指向自身这个对象，super代表父类
    //this和super都能不能在静态方法中出现

//    super关键字：
//    可以访问父类的属性
//            可以访问父类的方法
//    指代父类的构造方法， 如果有多个，靠参数来区分。要在第一行。
//    this关键字：
//    作为本类的对象，
//    访问本类的属性。如果在继承中，本类没有这个属性，那么再找父类中。
//    访问本类的方法
//    可以指代本类的构造方法：this()。要在第一行。




}
